home *** CD-ROM | disk | FTP | other *** search
Wrap
/* * Config.ole * * USAGE: Config.ole * * Config.ole is the first release of the OLE server configuration module. * Let you choose some parameters will be used by all modules. * * HISTORY: * v1.03 bugs fixed, used the new command INFO * * v1.04 added the possibility to change the progress indicator * * v1.05 bug fixed in the "INFO" request * * v1.06 added ActivateGadget() * * v1.07 aligned with the new server design v1.10 * * v1.08 bug fixed in ReqFile() * * v1.09 the catalog compiler is an OLE module * * $(C): (1994, Rocco Coluccelli, Bologna) * $VER: Config.ole 1.09 (04.Dec.1994) */ PARSE ARG oleclip PARSE VALUE GETCLIP(oleclip) WITH jobID modID box.left box.top char.w char.h olewin oleport olehost userscreen userport . locale config . IF ~SHOW('C',config) THEN DO olefile.ct = 'OLE:misc/OLE.rexx.ct' olefile.ed = 'C:ED' END ELSE PARSE VALUE GETCLIP(config) WITH olefile.ct','olefile.ed',' ADDRESS VALUE oleport /* * Get the server configuration clip */ INFO jobID modID 'config.0.1' oleconfig = GETCLIP(oleclip) IF ~SHOW('C',oleconfig) THEN DO win.bl = 3; win.bt = 15; win.br = 4; win.bb = 2 win.font = 'topaz.font'; win.fonth = 8; win.fontw = 8 oleind.outer = 0; oleind.inner = 0; oleind.color = 4 END ELSE PARSE VALUE GETCLIP(oleconfig) WITH win.bl','win.bt','win.br','win.bb','win.font','win.fonth','win.fontw','oleind.outer','oleind.inner','oleind.color',' /* * Get the progress indicator height */ INFO jobID modID 'oleind.hei' oleind.hei = GETCLIP(oleclip) /* * Get the compiler message port */ INFO jobID modID 'oleport.' || jobID || '.' || modID + 1 compilerport = GETCLIP(oleclip) IF OPENPORT(olehost) == NULL() THEN DO ERROR jobID modID 1 olehost SETJOB jobID 'end' EXIT 10 END rt_TAG = 'rt_pubscrname=' || userscreen 'rtez_flags=ezreqf_centertext' st = GUIGads() DO UNTIL st = 'end' CALL WAITPKT(olehost) pkt = GETPKT(olehost) IF pkt == NULL() THEN ITERATE PARSE VALUE GETARG(pkt) WITH cmd argv . /* * n0 = gadget to update nn = gadget to activate */ PARSE VALUE GETARG(pkt,1) WITH n0 nn . SELECT WHEN cmd = 'CATALOG' THEN DO IF argv = 'EDIT' THEN INTERPRET 'ADDRESS COMMAND' '"' || olefile.ed olefile.ct || '"' ELSE IF olefile.ct ~= '' & RIGHT(olefile.ct,3) = '.ct' THEN DO IF ~SHOW('P',compilerport) THEN DO SETJOB jobID modID + 1 CALL Wait_For_Port(compilerport) END IF SHOW('P',compilerport) THEN INTERPRET 'ADDRESS' compilerport '"COMPILE' olefile.ct || '"' END END WHEN cmd = 'PROGIND' THEN IF argv = '' THEN DO i = 0 TO 100 BY 2 CALL FillProgInd(n0,i,oleind.color) END ELSE DO oleind.argv = oleind.argv + 1 IF oleind.argv = 3 & argv ~= 'COLOR' THEN oleind.argv = 0 IF oleind.argv = 16 THEN oleind.argv = 0 END WHEN cmd = 'SETUP' THEN DO CALL Gadgets(7,n1.st,n2.st) st = argv CALL Gadgets(4,n1.st,n2.st) IF st = nborder THEN CALL BorderBox() END WHEN cmd = 'BORDER' THEN DO CALL BorderBox() str = GETARG(pkt,2) IF DATATYPE(str,'N') & str > 0 THEN win.argv = str g_str.n0 = win.argv CALL BorderBox() END WHEN cmd = 'REQFILE' THEN DO PARSE VAR argv t . str = STRIP(GETARG(pkt,2),'B') IF str = '' THEN str = ReqFile(100,100,olefile.t,GetLocale(t),userscreen) olefile.t = str g_str.n0 = str END WHEN cmd = 'OKAY' THEN DO IF st = nborder THEN CALL BorderBox() IF st = 1 THEN st = 'end' ELSE DO CALL Gadgets(7,n1.st,n2.st) st = 1 CALL Gadgets(4,n1.st,n2.st) END END WHEN cmd = 'UNICONIFY' THEN CALL Gadgets(8,1,g_gads) WHEN cmd = 'HELP' THEN ABOUT jobID modID 'HELP' || st WHEN cmd = 'QUIT' THEN st = 'end' OTHERWISE NOP END IF n0 ~= '' THEN DO CALL Gadgets(2,n0) IF nn ~= '' THEN CALL ActivateGadget(olewin,GAD.nn) CALL SETCLIP(config,olefile.ct','olefile.ed',') END CALL REPLY(pkt,0) END CALL CLOSEPORT(olehost) IF cmd ~= 'QUIT' THEN DO CALL SETCLIP(oleconfig,win.bl','win.bt','win.br','win.bb','win.font','win.fonth','win.fontw','oleind.outer','oleind.inner','oleind.color',') 'CONFIG 0 1' SETJOB jobID 'end' NEWPREFS END EXIT 0 /* * procedure that split a path and request a file * * pathname = ReqFile(x,y,path,title,userscreen) */ ReqFile: PROCEDURE dir = ''; file = '' IF ARG(3) ~= '' THEN DO pos = LASTPOS('/',ARG(3)) IF pos = 0 THEN DO pos = POS(':',ARG(3)) dir = LEFT(ARG(3),pos) END ELSE dir = LEFT(ARG(3),pos - 1) file = SUBSTR(ARG(3),pos + 1) END RETURN GetFile(ARG(1),ARG(2),dir,file,ARG(4),ARG(5)) GetLocale: PROCEDURE EXPOSE locale ARG strID strID = 'þ'strID'þ'; PARSE VALUE GETCLIP(locale) WITH (strID)text'Þ' RETURN text BorderBox: x = win.w - win.br; y = win.h - win.bb CALL SetDrMd(olewin,COMPLEMENT) CALL Move(olewin,win.bl,win.bt) CALL Draw(olewin,x,win.bt); CALL Draw(olewin,x,y); CALL Draw(olewin,win.bl,y); CALL Draw(olewin,win.bl,win.bt) CALL SetDrMd(olewin,JAM1) RETURN DrawProgInd: IF ARG(5) = 0 THEN RETURN CALL Move(olewin,ARG(1),ARG(4)) CALL SetAPen(olewin,3 - ARG(5)) CALL Draw(olewin,ARG(1),ARG(2)); CALL Draw(olewin,ARG(3),ARG(2)) CALL SetAPen(olewin,ARG(5)) CALL Draw(olewin,ARG(3),ARG(4)); CALL Draw(olewin,ARG(1),ARG(4)) RETURN FillProgInd: PARSE ARG n x1 = g_xpos.n + 12; y1 = g_ypos.n + 8 x2 = g_len.n - 24; y2 = g_ypos.n + g_hei.5 - 8 IF ARG(2) = 0 THEN DO CALL SetAPen(olewin,0); CALL RectFill(olewin,x1,y1,x1 + x2,y2) END CALL SetAPen(olewin,ARG(3)); CALL RectFill(olewin,x1,y1,x1 + ARG(2) * x2 % 100,y2) RETURN GUIGads: g_offx. = 2; g_offx.1 = 0; g_offx.3 = 2 g_offy. = 2; g_offy.1 = char.h + 1; g_offy.3 = 3 g_wid. = 8; g_wid.1 = 0; g_wid.3 = 12 g_hei. = char.h + 4; g_hei.1 = char.h + 1; g_hei.3 = char.h + 6 g_hei.5 = 20; g_offx.5 = 0; g_offy.5 = 0 g_sx = char.w % 2; g_sy = char.h % 4 g_onoff. = 0 box.left = box.left + g_sx; box.top = box.top + 2 * g_sy box.w = 30 * char.w n = 1 nmain = 1; nborder = 2; nlocale = 3; nprog = 4; nbases = 5 n1.nmain = n x = box.left; y = box.top CALL IniGad(2,2,0,'SETUP' nborder,CENTER(GetLocale(1),24)) y = y + g_hei.3 + 2 * g_sy CALL IniGad(2,2,0,'SETUP' nlocale,CENTER(GetLocale(2),24)) y = y + g_hei.3 + 2 * g_sy CALL IniGad(2,2,0,'SETUP' nprog,CENTER(GetLocale(3),24)) y = y + g_hei.3 + 2 * g_sy CALL IniGad(2,2,0,'SETUP' nbases,CENTER(GetLocale(4),24)) box.h = y n2.nmain = n - 1 n1.nborder = n y = box.top CALL IniGad(3,2,0,'BORDER' bt '%1' n n + 4'%2%g',win.bt,3) CALL IniGad(1,0,1,,GetLocale(5)) y = y + g_hei.3 + 4 * g_sy CALL IniGad(1,2,0,,GetLocale(6)) y = y + g_hei.3 + 4 * g_sy CALL IniGad(1,1,0,,GetLocale(7)) CALL IniGad(3,0,1,'BORDER' bl '%1' n n + 1'%2%g',win.bl,3) n1 = IniGad(3,0,0,'BORDER' br '%1' n n + 2'%2%g',win.br,3) n2 = IniGad(1,0,1,,GetLocale(8)) x = box.left + box.w - x; g_xpos.n1 = g_xpos.n1 + x; g_xpos.n2 = g_xpos.n2 + x y = y + g_hei.3 + 4 * g_sy CALL IniGad(3,2,0,'BORDER' bb '%1' n n1.nborder '%2%g',win.bb,3) CALL IniGad(1,0,1,,GetLocale(9)) box.h = MAX(box.h,y) n2.nborder = n - 1 n1.nlocale = n y = box.top CALL IniFileGad('REQFILE ED',olefile.ed,GetLocale(10)) y = y + g_hei.3 + 2 * g_sy CALL IniFileGad('REQFILE CT',olefile.ct,GetLocale(11)) y = y + g_hei.3 + 2 * g_sy CALL IniGad(2,1,0,'CATALOG EDIT',GetLocale(12)) CALL IniGad(2,0,1,'CATALOG MAKE',GetLocale(13)) box.h = MAX(box.h,y) n2.nlocale = n - 1 n1.nprog = n y = box.top CALL IniGad(1,2,0,,GetLocale(17)) y = y + g_hei.3 + 2 * g_sy CALL IniGad(2,1,0,'PROGIND OUTER%1' n + 3,GetLocale(18)) CALL IniGad(2,2,0,'PROGIND INNER%1' n + 2,GetLocale(19)) CALL IniGad(2,3,0,'PROGIND COLOR%1' n + 1,GetLocale(20)) y = y + g_hei.3 + 2 * g_sy CALL IniGad(5,1,0) y = y + g_hei.5 + 2 * g_sy CALL IniGad(2,2,0,'PROGIND%1' n - 1,GetLocale(21)) box.h = MAX(box.h,y) n2.nprog = n - 1 n1.nbases = n y = box.top CALL IniGad(1,2,0,,GetLocale(14)) box.h = MAX(box.h,y) n2.nbases = n - 1 y = box.h + g_hei.3 + 2 * g_sy CALL IniGad(2,1,0,'OKAY',GetLocale(15)) g_gads = IniGad(2,3,0,'HELP',GetLocale(16)) box.h = y + g_hei.2 + 2 * g_sy - box.top win.w = box.w + 2 * g_sx + win.bl + win.br win.h = box.h + 2 * g_sy + win.bt + win.bb WINDOW jobID modID (box.w + 2 * g_sx) (box.h + 2 * g_sy) 1 1 CALL Gadgets(4,g_gads - 1,g_gads) CALL Gadgets(4,n1.nmain,n2.nmain) RETURN nmain Gadgets: IF ARG(1) < 4 THEN DO i = 2 TO ARG(); n = ARG(i) IF ARG(1) ~= 1 THEN CALL DelGad(n,g_type.n) IF ARG(1) ~= 3 THEN CALL NewGad(n,g_type.n) END ELSE IF ARG(1) < 7 THEN DO n = ARG(2) TO ARG(3) IF ARG(1) ~= 4 THEN CALL DelGad(n,g_type.n) IF ARG(1) ~= 6 THEN CALL NewGad(n,g_type.n) END ELSE IF ARG(1) = 8 THEN DO n = ARG(2) TO ARG(3) IF g_onoff.n THEN CALL NewGad(n,g_type.n) END ELSE DO DO n = ARG(2) TO ARG(3) g_onoff.n = 0 IF g_type.n ~= 1 & g_type.n ~= 5 THEN CALL RemoveGadget(olewin,GAD.n) END CALL SetAPen(olewin,0) CALL RectFill(olewin,box.left,box.top,box.left + box.w,box.top + box.h) CALL RefreshGadgets(olewin) END RETURN DelGad: PARSE ARG n,t g_onoff.n = 0 IF t ~= 1 & t ~= 5 THEN CALL RemoveGadget(olewin,GAD.n) x = g_xpos.n - g_offx.t; y = g_ypos.n - g_offy.t CALL SetAPen(olewin,0) CALL RectFill(olewin,x,y,x + g_len.n,y + g_hei.t) RETURN NewGad: PARSE ARG n,t g_onoff.n = 1 IF t = 2 THEN CALL AddGadGet(olewin,g_xpos.n,g_ypos.n,GAD.n,g_str.n,g_msg.n) ELSE IF t = 3 THEN CALL AddGadGet(olewin,g_xpos.n,g_ypos.n,GAD.n,g_str.n,g_msg.n,g_len.n - 4,"RIDGEBORDER") ELSE IF t = 4 THEN CALL AddGadGet(olewin,g_xpos.n,g_ypos.n,GAD.n,D2C(32 + g_str.n * 183),g_msg.n) ELSE IF t = 5 THEN DO CALL DrawProgInd(g_xpos.n + 2, g_ypos.n + 2,g_xpos.n + g_len.n - 2, g_ypos.n + g_hei.t - 2,oleind.outer) CALL DrawProgInd(g_xpos.n + 10,g_ypos.n + 6,g_xpos.n + g_len.n - 10,g_ypos.n + g_hei.t - 6,oleind.inner) CALL FillProgInd(n,100,oleind.color) END ELSE DO CALL SetAPen(olewin,1) CALL Move(olewin,g_xpos.n,g_ypos.n) CALL Text(olewin,g_str.n) END RETURN IniGad: PARSE ARG t,na,nx,g_msg.n,g_str.n,var x = x + nx * g_sx IF t = 3 & var > 0 THEN g_len.n = var * char.w + g_wid.t ELSE IF t = 3 THEN g_len.n = box.left + box.w - x ELSE IF t = 5 THEN g_len.n = box.w ELSE g_len.n = LENGTH(g_str.n) * char.w + g_wid.t IF na > 0 THEN x = box.left + (na - 1) * (box.w - g_len.n) % 2 + nx * g_sx g_xpos.n = x + g_offx.t; g_ypos.n = y + g_offy.t; g_type.n = t x = x + g_len.n n = n + 1 IF t = 4 THEN CALL IniGad(1,0,1,,var) RETURN n - 1 IniFileGad: PARSE ARG msg,str,txt CALL IniGad(1,1,0,,txt) y = y + g_hei.1 + 2 * g_sy CALL IniGad(2,1,0,msg '%1' (n + 1),'F') CALL IniGad(3,0,1,msg '%1' n '%2%g',str) RETURN n - 1